#include "base.h"
#include "unordered_map"
#include "unordered_set"

// P   A   H   N
// A P L S I I G
// Y   I   R   Q

// P     I    N
// A   L S  I G
// Y A   H R  Q
// P     I    e

class Solution
{
public:
    bool is_begin_num_char(char a)
    {
        return (a >= '0' && a <= '9') || a == '-' || a == '+';
    }
    bool is_num_char(char a)
    {
        return (a >= '0' && a <= '9');
    }
    bool begin_valid(char a)
    {
        return (a >= '0' && a <= '9') || a == '-' || a == ' ' || a == '+';
    }
    int myAtoi(string s)
    {
        int i = 0;
        bool start = false;
        bool neg = false;
        long long a = 0;
        while (i < s.length())
        {
            if (!start)
            {
                if (!begin_valid(s.at(i)))
                {
                    return 0;
                }
                start = is_begin_num_char(s.at(i));
                if (start)
                {
                    if (s.at(i) == '-')
                    {
                        neg = true;
                    }
                    else if (s.at(i) == '+')
                    {
                        // do nothing
                    }
                    else
                    {
                        a += (s.at(i) - '0');
                    }
                }
            }
            else if (is_num_char(s.at(i)))
            {
                if (a > INT_MAX)
                {
                    break;
                }
                a *= 10;
                a += (s.at(i) - '0');
            }
            else
            {
                break;
            }
            i++;
        }
        if (neg)
        {
            a = -a;
        }
        if (a > INT_MAX)
        {
            return INT_MAX;
        }
        else if (a < INT_MIN)
        {
            return INT_MIN;
        }
        else
        {
            return a;
        }
    }
};

void main()
{
    Solution sol;
    // sol.convert("A", 1);
    // sol.reverse(1563847412);
    sol.myAtoi("42");
    // auto a = sol.findMedianSortedArrays(a1, a2);
}